package Java8接口的新特性;

/*
    Java8中关于接口的改进:
        1、Java8中,可以为接口添加静态方法和默认方法,从技术角度来说,这是完全合法的,只是它看起来违反了接口作为一个抽象定义的理念
        2、静态方法:
            使用static关键字修饰,可以通过接口直接调用静态方法,并执行其方法体
        3、默认方法:
            默认方法使用default关键字修饰,可以通过实现类对象来调用
 */
public class Test {
    public static void main(String[] args) {
        SubClass subClass = new SubClass();
        //通过实现类的对象,可以调用接口中的默认方法
        subClass.method2();

        //接口中定义的静态方法,只能通过接口进行调用,实现类无法调用
        CompareA.method1();

        //如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的默认方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法(如果重写,则优先执行重写)
    }
}

class SuperClass{
//    public void method2() {
//        System.out.println("SuperClass中的方法");
//    }
}

class SubClass extends SuperClass implements CompareA{

    //实现类可以选择重写接口中的默认方法
//    @Override
//    public void method2() {
//
//    }
}


interface CompareA{

    //定义静态方法
    public static void method1(){
        System.out.println("接口中的静态方法");
    }

    //定义默认方法
    public default void method2(){
        System.out.println("接口中的默认方法");
    }

}
